package jp.fsoriented.toishi.data;

import java.util.Date;

import org.json.JSONException;
import org.json.JSONObject;

import android.os.Parcel;
import android.os.Parcelable;

public class Result implements Parcelable {

	/** 暗唱に挑戦した日時 */
	public Date date;
	/** 暗唱結果 */
	public boolean ok;

	/**
	 * コンストラクタ
	 */
	public Result() {
		this(new Date(), false);
	}

	/**
	 * コンストラクタ
	 * 
	 * @param date
	 *            暗唱に挑戦した日時
	 * @param ok
	 *            暗唱結果
	 */
	public Result(Date date, boolean ok) {
		set(date, ok);
	}

	/**
	 * コピーコンストラクタ
	 * 
	 * @param ret
	 *            元となるオブジェクト
	 */
	public Result(Result ret) {
		set(ret.date, ret.ok);
	}

	/**
	 * 指定されたオブジェクトと同じ値をセットする
	 * 
	 * @param ret
	 */
	public void set(Result ret) {
		set(ret.date, ret.ok);
	}

	/**
	 * 指定されたデータをまとめてセットする
	 * 
	 * @param date
	 *            暗唱に挑戦した日時
	 * @param ok
	 *            暗唱結果
	 */
	public void set(Date date, boolean ok) {
		this.date = date;
		this.ok = ok;
	}

	public int describeContents() {
		return 0;
	}

	public void writeToParcel(Parcel dest, int flags) {
		dest.writeSerializable(date);
		dest.writeByte((byte) (ok ? 1 : 0));
	}

	public static final Parcelable.Creator<Result> CREATOR = new Parcelable.Creator<Result>() {
		public Result createFromParcel(Parcel in) {
			return new Result((Date) in.readSerializable(), in.readByte() == 1);
		}

		public Result[] newArray(int size) {
			return new Result[size];
		}
	};

	public JSONObject asJSONObject() throws JSONException {
		JSONObject obj = new JSONObject();
		obj.put("date", date.getTime());
		obj.put("ok", ok);
		return obj;
	}

	public static Result fromJsonObject(JSONObject obj) throws JSONException {
		return new Result(new Date(obj.getLong("date")), obj.getBoolean("ok"));
	}

}
